package routes

import (
	"doctor_api_backend/config"
	controller "doctor_api_backend/controller"
	"doctor_api_backend/middleware"
	"log"

	"github.com/gin-gonic/gin"
)

// InitRoutes 初始化所有路由
// 功能：
// 1. 创建路由引擎
// 2. 设置全局中间件
// 3. 配置各个模块的路由
// 返回：
//   - *gin.Engine: Gin路由引擎实例
func InitRoutes() *gin.Engine {
	// 创建路由引擎
	r := gin.Default()

	// 设置全局中间件
	r.Use(gin.Logger())
	r.Use(gin.Recovery())

	// 设置API版本前缀
	apiGroup := r.Group("/api/" + config.GetConfig().API.Version)

	// 公开接口组（无需认证）
	publicGroup := apiGroup.Group("")
	{
		// 用户认证相关接口
		publicGroup.POST("/register", controller.RegisterUser)
		publicGroup.POST("/login", controller.LoginUser)
		publicGroup.POST("/logout", controller.LogoutUser)
	}

	// 需要认证的接口组
	authorizedGroup := apiGroup.Group("")
	authorizedGroup.Use(middleware.AuthMiddleware())
	{
		log.Println("正在设置需要认证的路由...")

		// 设置用户管理相关路由
		SetupUserManageRoutes(authorizedGroup)
		// 设置医生相关路由
		SetupDoctorRoutes(authorizedGroup)
		// 设置患者相关路由
		SetupPatientRoutes(authorizedGroup)
		// 设置病历相关路由
		SetupMedicalRecordRoutes(authorizedGroup)
		// 设置药品相关路由
		SetupMedicineRoutes(authorizedGroup)
		// 设置医生患者映射相关路由
		// SetupDoctorPatientMappingRoutes(authorizedGroup)
		// 设置病种模板相关路由
		SetupSickTemplateRoutes(authorizedGroup)
		// 设置医嘱相关路由
		SetupMedicalOrderRoutes(authorizedGroup)
		// 设置医生病人映射相关路由
		SetupDoctorPatientMappingRoutes(authorizedGroup)
		// 设置入院通知单相关路由
		SetupAdmissionNoticeRoutes(authorizedGroup)
		// 其他需要认证的路由组...
		log.Println("需要认证的路由设置完成")
	}

	return r
}

// 调试指南：
// 1. 路由初始化测试：
//    - 确保所有路由正确注册
//    - 检查中间件是否正确加载
//    - 验证API版本前缀是否正确
//
// 2. 常见问题排查：
//    - 路由未注册：检查路由设置函数是否被调用
//    - 中间件未生效：检查中间件注册顺序
//    - 认证失败：检查token验证逻辑
//    - 路由404：检查路由路径是否正确
//
// 3. 开发建议：
//    - 使用日志记录路由初始化过程
//    - 添加路由注册状态检查
//    - 实现优雅关闭
//    - 添加性能监控
